# coding=utf-8
# from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse, HttpResponseBadRequest
from django.views.decorators.csrf import csrf_exempt
from django.utils.timezone import utc
 
from wechat_sdk import WechatBasic
from wechat_sdk.exceptions import ParseError
from wechat_sdk.messages import TextMessage, ImageMessage

from .models import Sign, Name, Picture

import time
import datetime
import urllib

SITE_URL = "http://52.192.253.107/api/"

@csrf_exempt
def wechat_main(request):
    """
    所有的消息都会先进入这个函数进行处理，函数包含两个功能，
    微信接入验证是GET方法，
    微信正常的收发消息是用POST方法。
    """

    WECHAT_TOKEN = "haoxiang"
    AppID = 'wx538dbeab8fc3a387'
    AppSecret = 'a88db97a336444a14f9a8402fa54a23c'
     
    # 实例化 WechatBasic
    wechat_instance = WechatBasic(
        token=WECHAT_TOKEN,
        appid=AppID,
        appsecret=AppSecret
    )

    # 从 request 中提取基本信息 (signature, timestamp, nonce, xml)
    signature = request.GET.get('signature')
    timestamp = request.GET.get('timestamp')
    nonce = request.GET.get('nonce')

    # 检验合法性
    if not wechat_instance.check_signature(signature=signature, timestamp=timestamp, nonce=nonce):
        return HttpResponseBadRequest('Verify Failed')

    if request.method == 'GET':
        return HttpResponse(
            request.GET.get('echostr', ''), content_type="text/plain")

    # 解析本次请求的 XML 数据
    try:
        wechat_instance.parse_data(data=request.body)
    except ParseError:
        return HttpResponseBadRequest('Invalid XML Data')

    # 获取解析好的微信请求信息
    message = wechat_instance.get_message()
    open_id = message.source

    reply_text = ('''
目前支持的功能:
1.签到
2.腹肌撕裂视频
3.活动规则
4.龙哥感言
5.查看签到记录
6.查看上传的图片
tips:
①输入我是XX（例如我是张三）完成身份认证;
②支持上传图片
③输入对应序号获取相应信息，还有更多功能正在开发中哦 ^_^
        ''') 

    if isinstance(message, TextMessage):
        # 当前会话内容
        content = message.content.strip()

        if content == '1' or content == u'签到':
            # 签到信息入库
            now = datetime.datetime.utcnow().replace(tzinfo=utc)
            Sign.objects.create(
                wx_id=open_id,
                sign_time=now,
                )

            # 返回信息
            t = time.ctime()
            reply_text = (t + '\n签到成功！')
            # 如果用户没有上传过照片，则选择默认图片，否则选择最近一张
            # pic_list = Picture.objects.filter(wx_id=open_id)
            # if not pic_list:
            #     pic_url = "http://mmbiz.qpic.cn/mmbiz/JSFqQrhswPAKD3hbAlIlJtzH4Txp82uH1jJLl2nETA3Znt91qicrCwlborT3PEfSt2ibshOGS18zymUJInIXKazA/0"
            # else:
            #     pic_url = pic_list.order_by('-insert_time')[0].pic_url
            pic_url = "http://mmbiz.qpic.cn/mmbiz/JSFqQrhswPAKD3hbAlIlJtzH4Txp82uH1jJLl2nETA3Znt91qicrCwlborT3PEfSt2ibshOGS18zymUJInIXKazA/0"
            url = SITE_URL + "sign_history/" + open_id

            articles = [
            {
                "title": reply_text,
                "description": "坚持就是胜利~",
                "picurl": pic_url,
                # url指向用户签到历史页面
                "url": url,
            }]
            response = wechat_instance.response_news(articles=articles)            
            return HttpResponse(response, content_type="application/xml")   

        elif content == '2' or content == u'视频' or content == u'教程' or content == u'腹肌撕裂':
            reply_text = ("[8分钟腹肌锻炼 '肌肉撕裂者' : http://m.v.qq.com/play/play.html?vid=a0150066gw5&ptag=4_4.1.5.9795_wxf]")

        elif content == '3' or content == u'活动规则':
            reply_text = ('''
饮食：多吃鱼、鸡肉等高蛋白食物，少主食，但必须吃

训练分两类：
1、纯腹肌者： HIIT/T25 30分钟 ； 腹肌撕裂 8分钟--》17分钟 
每周>=3次
2、减脂找腹肌者： HIIT/T25 30分钟 + 椭圆机或跑步机 30分钟，或椭圆机1小时 ； 腹肌撕裂 8分钟--》17分钟 
每周>=5次
（fanlong、道长、少游、宙斯、刘远）

组织形式：
1、  每周一、三、五，团队全员中午一起腹肌撕裂，或 HIIT/T25 30分钟；
2、  其余运动量自行根据作息规律自己组织；
3、  每天达到运动量后记得签到，每周分别要求3次、5次以上；
4、  每周一、三、五集中训练允许请假，每周达标即可；
5、  运动量次数每周不达标者，群里按人头发随机红包，总金额至少50元，且影响活动最终奖励分配 ^_^
                ''')

        elif content == '4' or content == u'龙哥感言':
            reply_text = ('''
唯有相信，才有可能
---写在腹肌撕裂全面启动之前

听到大家讨论的这个活动---2个月全体出腹肌，第一反应是"不可能"。作为未入健身界的菜鸟，也能深刻的认识到这个难度：参加塑形班近两个月，每周运动3-4次，约40分钟慢跑运动量，最好的时候瘦了4斤，国庆吃喝休息两周迅速反弹；同期训练收获最大的也就瘦了7、8斤，肌肉略显线条，但是呢，他的运动量每周至少5天，每天约1小时椭圆机+半小时跑步。啰嗦这么多，就是为了论证我的第一反应。

回头想想，觉得“不可能”，只是没有经历过，不过，假如都经历过，还有什么好突破的，要突破的不仅是行为，还包括思维。十年前看腾讯，两年前看手游，谁能想到今天的规模；再离我们更近的说，蓝鲸，四年前还只是QQ游戏大厅的一套运维工具，两年前也只是一套做的还不错的可以快速开发运维APP的平台，今天呢，已经是腾讯游戏运维对外的招牌，自成体系。分析蓝鲸的成功点，一是强大的执行力，二则是不囿于旧有框架的突破。

腹肌撕裂，希望能够成为运营安全组突破的起点，今天，突破的是腹肌，明天，突破的就是运维安全、数据安全、操作审计；今天，突破的是腹肌，明天，突破的就是事业、乃至人生！

唯有相信，才有可能，望共勉！fanlong yy于2015年10月26日夜
                ''')

        elif content == '5' or content == u'签到记录':
            # pic_list = Picture.objects.filter(wx_id=open_id)
            # if not pic_list:
            #     pic_url = "http://mmbiz.qpic.cn/mmbiz/JSFqQrhswPAKD3hbAlIlJtzH4Txp82uH1jJLl2nETA3Znt91qicrCwlborT3PEfSt2ibshOGS18zymUJInIXKazA/0"
            # else:
            #     pic_url = pic_list.order_by('-insert_time')[0].pic_url
            pic_url = "http://mmbiz.qpic.cn/mmbiz/JSFqQrhswPAKD3hbAlIlJtzH4Txp82uH1jJLl2nETA3Znt91qicrCwlborT3PEfSt2ibshOGS18zymUJInIXKazA/0"

            url = SITE_URL + "sign_history/" + open_id

            articles = [
            {
                "title": "点击查看签到记录~",
                "picurl": pic_url,
                # url指向用户签到历史页面
                "url": url,
            }]
            response = wechat_instance.response_news(articles=articles)            
            return HttpResponse(response, content_type="application/xml")  

        elif content == '6' or content == u'照片' or content == u'图片' or content == 'photos':
            pic_list = Picture.objects.filter(wx_id=open_id)
            if not pic_list:
                reply_text = "您还没有上传照片~"
            else:
                reply_text = "点击查看所有照片~"
                pic_url = pic_list.order_by('-insert_time')[0].pic_url
                url = SITE_URL + "show_pictures/" + open_id
                articles = [
                {
                    "title": reply_text,
                    "picurl": pic_url,
                    "url": url,
                }]
                response = wechat_instance.response_news(articles=articles)            
                return HttpResponse(response, content_type="application/xml")  

        elif content == 'admin':
            articles = [
            {
                "title": "点击进入管理员界面=_=",
                "description": "牛逼！",
                "picurl": "http://mmbiz.qpic.cn/mmbiz/JSFqQrhswPAKD3hbAlIlJtzH4Txp82uHLDoibfqTkYK06gflxs2oq3uvTAgrT7ubq8PxwjaO5qpL6peqBxzOGZA/0",
                "url": "http://54.64.74.206/admin",
            },
            ]
            response = wechat_instance.response_news(articles=articles)
            
            return HttpResponse(response, content_type="application/xml")            

        elif content.startswith(u'我是'):
            l = len(u'我是')
            name = content[l:]
            filter_list = Name.objects.filter(wx_id=open_id)
            if filter_list:
                Name.objects.filter(wx_id=open_id).update(name=name)
                reply_text = (u'Dear %s, 您的身份认证更新完毕！' % name)
            else:
                Name.objects.create(
                    name=name,
                    wx_id=open_id,
                    )
                reply_text = (u'Dear %s, 您的身份认证完毕！' % name)
        # else:
        #     params = urllib.urlencode({'msg': content})
        #     f = urllib.urlopen("http://www.xiaodoubi.com/simsimiapi.php?%s" % params).read

        response = wechat_instance.response_text(content=reply_text)

    elif isinstance(message, ImageMessage):
        picurl = message.picurl
        media_id = message.media_id
        now = datetime.datetime.utcnow().replace(tzinfo=utc)

        Picture.objects.create(
            wx_id=open_id,
            pic_url=picurl,
            media_id=media_id,
            insert_time=now,
            )

        reply_text = "点击查看所有照片~"
        url = SITE_URL + "show_pictures/" + open_id
        articles = [
        {
            "title": reply_text,
            "picurl": picurl,
            "url": url,
        }]
        response = wechat_instance.response_news(articles=articles)            
        return HttpResponse(response, content_type="application/xml")

    else:
        response = wechat_instance.response_text(content=reply_text)
 
    return HttpResponse(response, content_type="application/xml")